关于日期时间:在python中获取当前时间(毫秒)?

您所在的位置:网站首页 python 获取当天日期 关于日期时间:在python中获取当前时间(毫秒)?

关于日期时间:在python中获取当前时间(毫秒)?

2023-04-03 03:46| 来源: 网络整理| 查看: 265

如何在python中获取以毫秒为单位的当前时间?

相关讨论 import time; ms = time.time()*1000.0 @samplebias:time.time()在某些平台和python版本上的精度可能比datetime.utcnow()差。 从什么时候开始以毫秒为单位?如果您的意思是从新纪元开始(1970年1月1日午夜,UTC),请参见:stackoverflow.com/questions/18169099/… 要获得真正的微秒分辨率毫秒时间戳,请参阅此处:stackoverflow.com/questions/38319606/…

对于我所需要的,下面是我所做的,基于上面的@samplebias'评论:

123import time millis = int(round(time.time() * 1000)) print millis

快一点。谢谢大家,对不起,脑筋出了个屁。

重复使用:

123import time current_milli_time = lambda: int(round(time.time() * 1000))

然后:

12>>> current_milli_time() 1378761833768 相关讨论 这可能无法给出正确的答案。根据文档,"请注意,尽管时间总是以浮点数返回,但并非所有系统提供的时间精度都高于1秒。" 我想知道,你为什么要用round?看来江户一〔一〕就够了? @maximvladimirsky python的int方法实际上是floor的值,它不取整它们。因此,round()ing 25.7将按预期给我们26,但只要发送到int()将给我们25。很奇怪,但事情就是这样。有趣。 在我看来,我会用地板而不是圆形,但那只是我自己。如果有人问一个小时是多少,是7:32,他们可能想要的数字是7,而不是8。 @Davr,我们说的是微秒到毫秒的取整… 如下面的答案所示,在windows下,datetime.now()或time.time()的分辨率是几毫秒。为了获得更好的分辨率,您应该将now()与time.clock()结合使用,后者捕获操作系统的高性能计数器,从而产生usec分辨率。 @平行宇宙:.utcnow()在最近的cpython windows上使用GetSystemTimeAsFileTime()。time.clock()呼叫(QueryPerformanceCounter()呼叫)会不会带来比它可能减少的更多的噪音?见精度与精度不一样。 拉姆达号接近地狱般的岩石。再深入一点,谢谢@naftulitzvikay 在Windows7中至少有1/100秒看起来不错,对我来说已经足够好了。 @MaximVladimirsky不是int()的行为。int不生成值,它向零取整。正数也是一样的,负数是相反的。int(1.5)给出1,int(-1.5)给出-1,math.floor(-1.5)给出-2参见:docs.python.org/2/library/stdtypes.html 要获得真正的微秒分辨率毫秒时间戳,请参阅此处:stackoverflow.com/questions/38319606/… 对于以毫秒为单位的历元时间,这是相同的答案。 确定到微秒分辨率的差异(如基准代码)和获得今天的一般时间(高达毫秒)是非常不同的要求,并且需要不同的工具来实现这一点。事实上,实时时钟硬件的精度只有毫秒级,x86 CPU为微秒级的东西提供了另一种功能。在python 3中使用time.perf_counter()以达到微秒的目的。 @Naftuli-kay我看到了int与round(floor与round),但是如果你使用round()的话,你还需要int(round())吗?

time.time()只能对第二个给出解决方案,毫秒的首选方法是datetime。

123from datetime import datetime dt = datetime.now() dt.microsecond 相关讨论 不太有用-这只会在dt的秒内给你微秒。见stackoverflow.com/a/1905423/74632 +1因为这是从系统中获取可靠时间戳的官方方法。 实际上,问题是毫秒而不是微秒,这并不容易 @简:在某些系统上的旧的cpython版本上,datetime.utcnow()本可以提供比time.time()更好的分辨率。尽管在大多数系统或当前的cpython中,time.time()和datetime.utcnow()都使用相同的底层OS API来获取时间。@用户3324131显示如何从datetime.utcnow()获取毫秒。 - 1。这是对这个问题的错误回答。正如@boris所评论的,这并没有给出"以微秒为单位的时间",例如,不包括以微秒为单位的天、小时、秒。 +1这给出了一个正确的值,并且由于数学原因,可以假定算术运算有效。如果用户需要以毫秒/微秒为单位的当前时间,简单的算术将把它们带到那里。如果需要一个时间增量——这不是要求的——算术,同样可以节省一天的时间。 @J-A:很容易加上与天相对应的微秒,等等。 @J.F.塞巴斯蒂安不,不是。你不知道其中一天是否有闰秒。 @J-A:它确实包括"天、小时、秒"(它修复了你评论中指出的问题)。为了解决新问题(闰秒):posix time不计算闰秒,time.time()在python支持的大多数系统上返回posix time(如果我们排除不常见的"正确"时区)。不要混淆精度和准确性——这个问题是关于毫秒精度——如果您需要毫秒精度,那么您需要首先讨论时钟同步、NTP(LAN与WAN)等。 @J.F.塞巴斯蒂安,你说得对。不过,答案仍然需要更新。 给出当前时间的微秒,而不是整个时间戳。 您可能希望使用microsecond而不是millisecond。

12def TimestampMillisec64():     return int((datetime.datetime.utcnow() - datetime.datetime(1970, 1, 1)).total_seconds() * 1000) 相关讨论 您可以内联.total_seconds()的公式以产生(可能)更好的精度:(td.microseconds + (td.seconds + td.days * 86400) * 10**6) / 10**3(启用真正的除法),或者如果您想截断毫秒,则使用// 10**3。 如果使用datetime,这似乎是最好的答案

另一个解决方案是可以嵌入到自己的utils.py中的函数。

123import time as time_ #make sure we don't override time def millis():     return int(round(time_.time() * 1000))

如果您希望在代码中使用一个简单的方法,返回带有日期时间的毫秒数:

12345678910from datetime import datetime from datetime import timedelta start_time = datetime.now() # returns the elapsed milliseconds since the start of the program def millis():    dt = datetime.now() - start_time    ms = (dt.days * 24 * 60 * 60 + dt.seconds) * 1000 + dt.microseconds / 1000.0    return ms 相关讨论 这是以毫秒为单位的两次时间差,将您的方法与@jason s answer组合后,将以毫秒为单位给出当前时间戳…考虑到这一点,Unix时间戳将是您使用start_time=datetime(1970,1,1)的方法。 本地时间可能不明确且不单调(由于DST转换或其他原因更改本地UTC偏移)。用.utcnow()代替,或者如果你不需要绝对时间,你可以用time.monotonous()。注:在启用真除法的情况下,some_int + dt.microseconds/ 1000.0与公式( ) / 10**3之间由于浮点运算存在细微差异。见相关答案中total_seconds()的显式公式及链接。

只是示例代码:

12import time timestamp = int(time.time()*1000.0)

输出:一兆五千三百四十三亿四千三百七十八万一千三百一十一

我找到的获取当前UTC时间(毫秒)的最简单方法是:

123456789101112# timeutil.py import datetime def get_epochtime_ms():     return round(datetime.datetime.utcnow().timestamp() * 1000) # sample.py import timeutil timeutil.get_epochtime_ms()

微秒是1/1000000秒,毫秒是1/1000秒,所以

dt.microseconds/1000.0应为dt.microseconds/1000000.0

相关讨论 请格式化您的答案以提高其可读性。另外,您还没有真正回答问题的第一部分"如何获得当前时间?".

123    from datetime import datetime     d = datetime.now()     print d.microsecond/1000 + d.second*1000


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3